package cn.tedu.boot2209.mapper;

import cn.tedu.boot2209.entity.Product;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * MyBatis Mapper接口方法名作为XML文件的ID不能重复，
 * 不能使用方法重载！
 */
@Mapper
public interface ProductMapper {
    /**
     * 统计商品的数量
     */
    Integer countProduct();

    /**
     * 根据价格统计商品数量
     */
    Integer countByPrice(double price);

    /**
     * 多参数查询时候，建议使用 @Param("price") 为参数定义 占位符名称
     * @param price 价格
     * @param num   数量
     * @return      统计结果
     */
    Integer countByPriceNum(@Param("price") double price,
                            @Param("num") int num);

    /**
     * 按照title进行模糊查询
     * @param title %手机
     * @return 数据
     */
    Integer countByTitle(String title);

    /**
     * 根据ID返回一个对象
     */
    Product findById(Integer id);

    /**
     * 返回一组实体对象
     * @param title %手机
     * @return 匹配的一组对象
     */
    List<Product> findByTitle(String title);

    /**
     * 向数据库插入数据
     * @param title
     * @param price
     * @param quantity
     * @return 更改行数
     */
    Integer saveProduct(@Param("title") String title,
                        @Param("price") Double price,
                        @Param("quantity") Integer quantity);

    /**
     * 使用POJO对象打包传递参数
     * @param product
     * @return
     */
    Integer saveProductItem(Product product);

    /**
     * 更新商品信息
     * @param product 商品信息，id是行识别关键字
     * @return 更新的数据
     */
    Integer updateProduct(Product product);

    /**
     * 动态SQL更新
     * @param product
     * @return
     */
    Integer updateProductPart(Product product);

}
